package com.athuawei.redis_springboot.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class SecKillService {

    @Autowired
    RedisTemplate redisTemplate;

    /**
     * 秒杀过程
     */
    public boolean doSecKill(String uid, String prodid) throws IOException {

        // 1.uid和prodid非空判断
        if (uid == null || prodid == null) {
            return false;
        }

        // 2.连接redis

        // 3.拼接key
        // 3.1 库存key
        String kcKey = "sk:" + prodid + ":qt";
        //3.2秒杀成功用户key
        String userKey = "sk:" + prodid + ":user";

        // 4.获取库存，如果库存null,秒杀没有开始
        Integer kc = (Integer) redisTemplate.opsForValue().get(kcKey);
        if (kc == null) {
            System.out.println("秒杀还没有开始，请稍等");
            return false;
        }

        // 5.判断用户是否重复秒杀操作
        if (redisTemplate.opsForSet().isMember(userKey, uid)) {
            System.out.println("已经秒杀成功了，不能重复秒杀！");
            return false;
        }

        // 6.如果商品数量小于1，秒杀结束
        if (kc <= 0) {
            System.out.println("秒杀已经结束了");
            return false;
        }

        // 7.秒杀过程，
        // 7.1库存-1
        redisTemplate.opsForValue().decrement(kcKey);

        // 7.2把秒杀成功用户添加到清单里面
        redisTemplate.opsForSet().add(userKey, uid);
        System.out.println("秒杀成功了......");

        return true;

    }
}
